import cProfile
import os
import pstats
from wc3 import count_chars, count_words, count_code_lines

def generate_large_file(file_path, size_mb=10):
    """生成指定大小的测试文件（英文文本+代码混合内容）"""
    with open(file_path, 'w', encoding='utf-8') as f:
        # 重复基础文本和代码片段，直到达到目标大小
        base_text = "Hello World! This is a test. " * 100  # 基础文本片段
        base_code = 'def func():\n    return 1 + 2  # 测试代码\n' * 10  # 基础代码片段
        content = (base_text + base_code) * 1000  # 初步放大
        # 循环写入直到文件大小达标
        while os.path.getsize(file_path) < size_mb * 1024 * 1024:
            f.write(content)

if __name__ == "__main__":
    test_file = "large_test.txt"
    try:
        # 生成10MB测试文件
        generate_large_file(test_file, size_mb=10)
        print("测试文件生成完成，开始性能分析...")
        
        # 性能分析：字符统计
        print("\n=== 字符统计性能分析 ===")
        cProfile.run('count_chars("{}")'.format(test_file), 'char_stats')
        pstats.Stats('char_stats').sort_stats('time').print_stats(3)
        
        # 性能分析：单词统计
        print("\n=== 单词统计性能分析 ===")
        cProfile.run('count_words("{}")'.format(test_file), 'word_stats')
        pstats.Stats('word_stats').sort_stats('time').print_stats(3)
        
        # 性能分析：代码行统计
        print("\n=== 代码行统计性能分析 ===")
        cProfile.run('count_code_lines("{}")'.format(test_file), 'code_stats')
        pstats.Stats('code_stats').sort_stats('time').print_stats(3)
        
    finally:
        # 清理测试文件
        if os.path.exists(test_file):
            os.remove(test_file)